home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / applications / wp / ged-pgp.lha / PGP.ged < prev    next >
Text File  |  1994-06-05  |  15KB  |  481 lines

  1. /*********************************************************************/
  2. /*                                                                   */
  3. /*   PGP für GoldEd 0.98 - Arexx Script                              */
  4. /*                                                                   */
  5. /*                                                                   */
  6. /*              ´GoldED 0.98´ - © Ditmar Eilert                      */
  7. /*                                                                   */
  8. /*           ´rexxreqtools.library´ © Nico François                  */
  9. /*                                                                   */
  10. /*                                                                   */
  11. /*  Autor: Lunz O. Wolfgang (Luwo)                                   */
  12. /*         <W.LUNZ@link-ba.cl.sub.de>                                */
  13. /*                                                                   */
  14. /*  Hinweis: ´MERGE´en des PGP.men an das für Textverarbeitung       */
  15. /*           verwendete GoldEd-Menü!                                 */
  16. /*           & diesen Script in das 'REXX:'-Verzeichnis kopieren     */
  17. /*                                                                   */
  18. /*                                                                   */
  19. /*   $VER: PGP-GoldEd-Script V0.91  ©Luwo (29.04.1994)               */
  20. /*                                                                   */
  21. /*********************************************************************/
  22.  
  23.  
  24.  
  25. ADDRESS COMMAND  'STACK 12000'        /* PGP ist ziemlich hungrig :) */
  26.  
  27. lib = 'rexxreqtools.library'
  28. if ~show('l',lib) then call addlib(lib,0,-30,0)
  29.  
  30.  
  31.  
  32. OPTIONS RESULTS                            /* enable return codes    */
  33.  
  34. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then   /* not started by GoldEd ?*/
  35.     ADDRESS 'GOLDED.1'
  36.  
  37. 'LOCK CURRENT'                             /* lock GUI, gain access  */
  38.  OPTIONS FAILAT 6                          /* ignore warnings        */
  39. SIGNAL ON SYNTAX                           /* ensure clean exit      */
  40. SIGNAL ON ERROR                            /* trap errors            */
  41.  
  42.  
  43. USERFILE = 'T:PGP_userIDs.tmp'           /* einige Standard-Variablen*/
  44. UserPath = 'T:Users'
  45. IDstring = '0x'
  46. NL       = '0a'x
  47. CLRSCR   = '0c'x
  48. PGP      = SEARCHPATH()   /* den Pfad aus der PGPPATH-Variablen lesen*/
  49.  
  50.  
  51. 'QUERY DOC VAR DEFAULTFILENAME'         /* wurde die Blockmarkierung */
  52. 'QUERY MARKED VAR BLOCKMARKIERUNG'      /* aktiviert?                */
  53. ORGFILENAME=DEFAULTFILENAME
  54.  
  55. IF BLOCKMARKIERUNG="TRUE" then  ORGFILENAME=DEFAULTFILENAME'.block'
  56.  
  57.  
  58.  
  59. /* --------- Begin der Verzweigungsroutine ------------------------- */
  60.  
  61.  
  62.  
  63. IF ARG(1)="READ_PGP" then READ_PGP()   /* SubProg, je nach Parameter */
  64. IF ARG(1)="WRITE_PGP" then WRITE_PGP()
  65. IF ARG(1)="ENCODE_normal" then ENCODE_normal()
  66. IF ARG(1)="DECODE_normal" then DECODE_normal()
  67. IF ARG(1)="UNTERSCHREIBEN" then UNTERSCHREIBEN()
  68. IF ARG(1)="KEY_aufnehmen" then KEY_aufnehmen()
  69. IF ARG(1)="KEY_ansehen" then KEY_ansehen()
  70. IF ARG(1)="KEY_editieren" then KEY_editieren()
  71. IF ARG(1)="KEY_entfernen" then KEY_entfernen()
  72. IF ARG(1)="KEY_beglaubigen" then KEY_beglaubigen()
  73. IF ARG(1)="KEY_anhaengen" then KEY_anhaengen()
  74. IF ARG(1)="KEY_generieren" then KEY_generieren()
  75.  
  76.  
  77. /* Kein verfügbarer Parameter ! */
  78.  
  79.  
  80. ADDRESS "GOLDED.1" 
  81. 'REQUEST BODY "PGP-Script-Fehler!" BUTTON "Mist!"'
  82.  REALLYQUIT()
  83.  
  84. /*----------- Ende der Verzweigungsroutine --------------------------*/
  85.  
  86. /*-------------------------------------------------------------------*/
  87. READ_PGP:                     /* PGP analysiert den Text selbständig */
  88.  
  89.      CALL SAVER()
  90.      ADDRESS COMMAND  PGP '+FORCE 'ORGFILENAME' -o'ORGFILENAME
  91.      CALL LOADER()
  92. REALLYQUIT('k')
  93. end
  94. /*-------------------------------------------------------------------*/
  95.  
  96.  
  97.  
  98. /*-------------------------------------------------------------------*/
  99. WRITE_PGP:                   /* Der Text wird für die entsprechenden */
  100.                              /* Empfänger codiert...                 */
  101.       CALL SAVER()
  102.       REQTITEL="Wählen sie die Empfänger.."
  103.       empfaengerliste = GETEMPFAENGER()
  104.         if empfaengerliste ~= '' then
  105.             do
  106.              ADDRESS COMMAND
  107.              PGP '-esta +FORCE 'ORGFILENAME EMPFAENGERLISTE
  108.              'c:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  109.              'c:delete >nil: 'ORGFILENAME'.asc'
  110.             end
  111.       CALL LOADER()
  112. REALLYQUIT()
  113. end
  114. /*-------------------------------------------------------------------*/
  115.  
  116.  
  117. /*-------------------------------------------------------------------*/
  118. ENCODE_normal:       /* Der Text wird mit einem Mantra verschlüsselt */
  119.  
  120.        CALL SAVER()
  121.         ADDRESS COMMAND
  122.         PGP '-cta ' ORGFILENAME
  123.        'C:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  124.        'c:delete >nil: 'ORGFILENAME'.asc'
  125.        CALL LOADER()   /* 'OPEN AGAIN' */
  126. REALLYQUIT()
  127. end
  128. /*-------------------------------------------------------------------*/
  129.  
  130.  
  131. /*-------------------------------------------------------------------*/
  132. DECODE_normal:       /* Der Text wird mit einem Mantra entschlüsselt */
  133.  
  134.        CALL SAVER()
  135.         ADDRESS COMMAND
  136.        PGP '-d +FORCE 'ORGFILENAME' -o'ORGFILENAME
  137.        CALL LOADER()
  138. REALLYQUIT()
  139. end
  140. /*-------------------------------------------------------------------*/
  141.  
  142. /*-------------------------------------------------------------------*/
  143. UNTERSCHREIBEN:       /* Der Text wird mit der persönlichen Signatur */
  144.                       /* unterschrieben, und ggfs. komprimiert       */
  145.  
  146.           TITXT = 'Text unterschreiben...'
  147.           BTTXT = '_Ja|_Nein'
  148.           BDTXT = 'Wollen sie den Text |auch komprimieren?'
  149.           call ABFRAGE()
  150.           if ergebnis =0 then
  151.                signcmd=' -sat +clearsig=on '
  152.             else
  153.                signcmd=' -sat +clearsig=off '
  154.  
  155.        CALL SAVER()
  156.            ADDRESS COMMAND
  157.            PGP SIGNCMD ORGFILENAME
  158.           'C:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  159.           'c:delete >nil: 'ORGFILENAME'.asc'
  160.        CALL LOADER()
  161. REALLYQUIT()
  162. end
  163. /*--------------------------------------------------------------------*/
  164.  
  165. /*--------------------------------------------------------------------*/
  166. KEY_aufnehmen:
  167.      CALL SAVER()
  168.      ADDRESS COMMAND
  169.      PGP '-ka '|| ORGFILENAME
  170.      'c:delete >nil: 'USERFILE
  171.      CALL LOADER()
  172. REALLYQUIT('key')
  173. end
  174. /*--------------------------------------------------------------------*/
  175.  
  176. /*--------------------------------------------------------------------*/
  177. KEY_ansehen:
  178.      REQTITEL="Welchen Key ansehen?..."
  179.      empfaengerliste = GETEMPFAENGER()
  180.      if empfaengerliste ~= '' then
  181.         do
  182.           ADDRESS COMMAND
  183.           PGP '-kvvc '|| empfaengerliste
  184.           REALLYQUIT('key')
  185.         end
  186. REALLYQUIT()
  187. end
  188. /*--------------------------------------------------------------------*/
  189.  
  190.  
  191. /*--------------------------------------------------------------------*/
  192. KEY_editieren:
  193.      REQTITEL="Welchen Key editieren?..."
  194.      empfaengerliste = GETEMPFAENGER()
  195.      if empfaengerliste ~= '' then
  196.         do
  197.           ADDRESS COMMAND
  198.           PGP '-ke '|| empfaengerliste
  199.           REALLYQUIT('key')
  200.         end
  201. REALLYQUIT()
  202. end
  203. /*--------------------------------------------------------------------*/
  204.  
  205.  
  206. /*--------------------------------------------------------------------*/
  207. KEY_entfernen:
  208.      REQTITEL="Welchen Key entfernen?..."
  209.      empfaengerliste = GETEMPFAENGER()
  210.      if empfaengerliste ~= '' then
  211.         do
  212.           ADDRESS 'GOLDED.1'
  213.           TITXT = 'Public-keys entfernen?'
  214.           BTTXT = '_Nein|_Ja'
  215.           BDTXT = namensliste
  216.           call ABFRAGE()
  217.           if ergebnis =0 then
  218.             do
  219.                ADDRESS COMMAND
  220.                PGP '-kr ' empfaengerliste
  221.                'c:delete >nil: 'USERFILE' T:users ALL'
  222.                REALLYQUIT('key')
  223.             end
  224.         end
  225. REALLYQUIT()
  226. end
  227. /*--------------------------------------------------------------------*/
  228.  
  229.  
  230. /*--------------------------------------------------------------------*/
  231. KEY_beglaubigen:
  232.    REQTITEL="Welchen Key beglaubigen?..."
  233.    empfaengerliste = GETEMPFAENGER()
  234.      if empfaengerliste ~= '' then
  235.         do
  236.           ADDRESS COMMAND
  237.           PGP '-ks '|| empfaengerliste
  238.           REALLYQUIT('key')
  239.         end
  240. REALLYQUIT()
  241. end
  242. /*--------------------------------------------------------------------*/
  243.  
  244.  
  245. /*--------------------------------------------------------------------*/
  246. KEY_anhaengen:
  247.  
  248.    RADIXcmd='INSERT'
  249.    REQTITEL="RADIX-64-Key einfügen..."
  250.  
  251.      empfaengerliste = GETEMPFAENGER()
  252.      if empfaengerliste ~= '' then
  253.        do
  254.             do i = 1 to words(empfaengerliste)
  255.              ADDRESS COMMAND
  256.              PGP '-fkxa 'word(empfaengerliste,i) ' >t:PGPextract.tmp'i
  257.             end
  258.  
  259.              ADDRESS 'GOLDED.1'
  260.             'QUERY ABSLINE VAR LIN'
  261.             'QUERY COLUMN VAR COL'
  262.             'REQUEST BODY="Wo wollen Sie den(die)|   RADIX-64 (ASCII)  |PublicKey(s) einfügen?"
  263.              TITLE="   Radix-64 Public-Key insert:"
  264.              BUTTON="_Cursor|Text_ende|_Vergiß es!" VAR ERGEBNIS'
  265.  
  266.             if ERGEBNIS = 2 then RADIXcmd='APPEND'
  267.  
  268.             if ERGEBNIS ~= 0 then
  269.                do i = 1 to words(empfaengerliste)
  270.                   'OPEN 'RADIXcmd' T:PGPextract.tmp'i
  271.                   'SAVE ALL'
  272.                end
  273.  
  274.             GOTO LINE LIN COLUMN COL
  275.             address command 'c:delete >nil: t:PGPextract.tmp#?'
  276.  
  277.        end
  278.  
  279. REALLYQUIT()
  280. end
  281. /*--------------------------------------------------------------------*/
  282.  
  283.  
  284. /*--------------------------------------------------------------------*/
  285. KEY_generieren:
  286.           TITXT = 'Secret-key generieren?'
  287.           BTTXT = '_Nein|_Ja'
  288.           BDTXT = ' Wollen Sie tatsächlich | einen geheimen Schlüssel | generieren?'
  289.           call ABFRAGE()
  290.           if ergebnis =0 then
  291.            do
  292.              ADDRESS COMMAND
  293.               PGP '-kg '
  294.               'c:delete >nil: 'USERFILE
  295.              REALLYQUIT('key')
  296.            end
  297. REALLYQUIT()
  298. end
  299. /*--------------------------------------------------------------------*/
  300.  
  301.  
  302.  
  303. /* ---------------- Auswahl der Empfaenger--------------------------- */
  304. GETEMPFAENGER:
  305.  
  306. ADDRESS COMMAND
  307. drop empfaengerliste
  308. PGPcmd   = ''
  309. namensliste= ''
  310.  
  311. /* ist der T:user-Path schon da? */
  312.  if ~EXISTS(UserPath) then 'C:makedir ' USERPATH
  313.  
  314. /* sind die UserIds schon extrahiert? */
  315.  if ~EXISTS(USERFILE) then  call MAKEUSERLISTE()
  316.  
  317. call rtfilerequest("T:Users/", , REQTITEL, ,"rtfi_flags=freqf_multiselect rt_pubscrname=GOLDED.1",empfaenger)
  318.  
  319. if empfaenger == 1 then
  320.   do
  321.     do i=1 to empfaenger.count
  322.       call Open('USID',empfaenger.i,"R")
  323.       dummy = readch('USID',8)
  324.       call Close('USID')
  325.  
  326.       if left(dummy,2)="0x" then
  327.         do
  328.           PGPcmd=PGPcmd dummy
  329.       namensliste =namensliste right(empfaenger.i,length(empfaenger.i)-8) '|'
  330.         end
  331.     end
  332.   end
  333.  
  334.   call rtfreefilebuffer()
  335. return PGPcmd
  336. /*--------------------------------------------------------------------*/
  337.  
  338.  
  339. /* Erstellen der aus der pubring.key-datei extrahierten User Ids */
  340. MAKEUSERLISTE:
  341.     ADDRESS COMMAND PGP ' -kv >'USERFILE
  342.        call Open('UFID',USERFILE,'R')
  343.            do until EOF('UFID')=1
  344.               dummy = READLN('UFID')
  345.  
  346.                 if (UPPER(LEFT(dummy,3))="PUB")&(word(dummy,4)~='***') then
  347.  
  348.                   do
  349.                     keyid = right(word(dummy,2),6)
  350.                     namestart= wordindex(dummy,4)
  351.                     nameend= pos('<',dummy)
  352.                      if nameend=0 then nameend=LENGTH(dummy)+2
  353.                     namelength=nameend-namestart-1
  354.                     name=substr(dummy,namestart,namelength)
  355.                     name=compress(name,':;/><')
  356.  
  357.                     call Open('currentUser',UserPath'/'name,'W')
  358.                     call Writech('currentUser',IDSTRING||KEYID)
  359.                     call Close('currentUser')
  360.  
  361.                   end
  362.  
  363.            end
  364.        call Close('UFID')
  365. say Clrscr
  366. return
  367. /*--------------------------------------------------------------------*/
  368.  
  369.  
  370. /* ------------------- diverse Unterprogramme ----------------------- */
  371.  
  372. SAVER:               /* Speichert, je nachdem, ob die Blockmarkierung */
  373.                      /* aktiviert wurde oder nicht, den ganzen Text,  */
  374.                      /* oder nur einen Ausschnitt daraus ab...        */
  375. ADDRESS "GOLDED.1"
  376. if BLOCKMARKIERUNG="FALSE" then
  377.     do
  378.       'SAVE ALL'
  379.     return 0
  380.     end
  381.  
  382. if BLOCKMARKIERUNG="TRUE" then
  383.     do
  384.       SAVE BLOCK NAME ORGFILENAME
  385.     return 0
  386.     end
  387. end
  388.  
  389. /*--------------------------------------------------------------------*/
  390. LOADER:         /* Lädt, je nachdem, ob die Blockmarkierung aktiviert */
  391.                 /* wurde oder nicht, den ganzen Text, oder auch nur   */
  392.                 /* einen Block wieder ein...                          */
  393.  
  394. ADDRESS "GOLDED.1"
  395. if BLOCKMARKIERUNG="FALSE" then
  396.     do
  397.       'OPEN AGAIN'
  398.     return 0
  399.     end
  400.  
  401. if BLOCKMARKIERUNG="TRUE" then
  402.     do
  403.       DELETE BLOCK
  404.       OPEN INSERT NAME ORGFILENAME
  405.       ADDRESS COMMAND 'c:delete >nil: 'ORGFILENAME
  406.     return 0
  407.     end
  408. end
  409.  
  410.  
  411. /*--------------------------------------------------------------------*/
  412. SEARCHPATH:
  413.  
  414. ADDRESS COMMAND
  415. if exists('env:PGPPATH') then
  416.     do
  417.      call Open('binpath','ENV:PGPPATH','R')
  418.      dummy=readln('binpath')
  419.      call Close('binpath')
  420.      dummy='PGP="'dummy||'/bin/pgp"'
  421.      interpret  dummy
  422.     end
  423.  
  424. else
  425.     do
  426.      ADDRESS "GOLDED.1"
  427.      TITXT = 'PGP-AREXX-INTERNAL-ERROR'
  428.      BTTXT = '_OKIDOKI'
  429.      BDTXT = "Die PGPPATH-Variable ist nicht gesetzt!|      Bitte deklarieren sie diese !    |    Vorläufig wird 'C:PGP' verwendet   "
  430.      call ABFRAGE()
  431.      return 'c:pgp'
  432.     end
  433.  
  434. ADDRESS COMMAND
  435. return PGP
  436. end
  437.  
  438.  
  439. /*--------------------------------------------------------------------*/
  440. ABFRAGE:                              /* Erstellt einen Requester...  */
  441.  
  442. ADDRESS "GOLDED.1"
  443. 'REQUEST TITLE="'TITXT'" BODY="'BDTXT'" BUTTON="'BTTXT'" VAR ERGEBNIS'
  444. return 0
  445. end
  446.  
  447.  
  448. /*--------------------------------------------------------------------*/
  449. REALLYQUIT:
  450. ADDRESS "GOLDED.1"
  451. arg QUITTER
  452.  
  453. if QUITTER~=''then
  454.     do
  455.       say NL 'Bitte "Return" um weiterzumachen'
  456.       pull QUITTER
  457.     end
  458. 'NAME 'DEFAULTFILENAME
  459. 'UNLOCK'                                  /* Sehr wichtig: unlock GUI */
  460. EXIT
  461.  
  462. /*--------------------------------------------------------------------*/
  463. ERROR:
  464.       say NL 'Ein Fehler ('RC') ist in Zeile:'SIGL' aufgetreten :~('
  465.       say    '-=> [Press return]'
  466.       pull QUITTER
  467.  
  468. ADDRESS "GOLDED.1"
  469. 'NAME 'DEFAULTFILENAME
  470. 'UNLOCK'
  471. EXIT
  472.  
  473.  
  474. /*--------------------------------------------------------------------*/
  475. SYNTAX:
  476.  ADDRESS "GOLDED.1"
  477. SAY "Sorry, Syntax-error line" SIGL ":" ERRORTEXT(RC) ":-("
  478. 'UNLOCK'
  479. /*--------------------------------------------------------------------*/
  480.  
  481.